package top.igotcha.mapreduce.sort;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Counter;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

/**
 * @time 2021/1/10
 * @auth Gotcha
 * @describe
 * Mapper的泛型
 *  KEYIN:k1的类型     行偏移量                    LongWritable
 *  VALUEIN:v1的类型   一行的文本数据               Text
 *  KEYOUT:k2的类型    可以进行比较及排序的Bean对象   SortWritable
 *  VALUEOUT:v2的类型  一行的文本数据               Text
 */

public class SortMapper extends Mapper<LongWritable,Text,SortWritable,Text> {

    /**
     * @describe 是将k1,v1转换为k2,v2
     * @param key 表示k1
     * @param value 表示v1
     * @param context 表示MapReduce上下文对象
     */
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        //自定义计数器
        Counter counter = context.getCounter("MR_COUNT", "MapReduceCounter");
        counter.increment(1L);

        //1.对每行数据进行拆分
        String[] split = value.toString().split("\t");
        //2.封装到SortWritable对象中，作为k2
        SortWritable sortWritable = new SortWritable();
        sortWritable.setFirst(split[0]);
        sortWritable.setSecond(Integer.parseInt(split[1]));
        //3.将k2,v2写入上下文
        context.write(sortWritable,value);
    }
}
